﻿Imports Testeitor.DAL
Imports System.Data.SqlClient
Imports Testeitor.Entidades

Public Class AsignacionDAO
    Inherits DAOBase

    Public Overrides Function CargarEntidad(ByVal reader As IDataReader, ByRef stack As Stack(Of Integer)) As Entidades.EntityBase
        Dim ent As New AsignacionEntity

        Dim temp As Object
        'Campo Id
        ent.Id = Convert.ToInt32(reader("id"))
        'Resto de campos
        temp = reader("tiempoLimite")
        If temp.Equals(DBNull.Value) Then
            ent.TiempoLimite = DateTime.Now
        Else
            ent.TiempoLimite = Convert.ToDateTime(reader("tiempoLimite"))
        End If

        temp = reader("estado_id")
        If temp.Equals(DBNull.Value) Then
            ent.Estado = New EstadoEntity
        Else
            Dim index As Integer
            index = Convert.ToInt32(reader("estado_id"))
            stack.Push(index)
        End If

        temp = reader("usuario_id")
        If temp.Equals(DBNull.Value) Then
            ent.User = New UsuarioEntity
        Else
            Dim index As Integer
            index = Convert.ToInt32(reader("usuario_id"))
            stack.Push(index)
        End If

        temp = reader("test_id")
        If temp.Equals(DBNull.Value) Then
            ent.Test = New TestEntity
        Else
            Dim index As Integer
            index = Convert.ToInt32(reader("test_id"))
            stack.Push(index)
        End If

        temp = reader("fechaAsignacion")
        If temp.Equals(DBNull.Value) Then
            ent.FechaAsignacion = DateTime.Now
        Else
            ent.FechaAsignacion = Convert.ToDateTime(reader("fechaAsignacion"))
        End If

        CargarEntidad = ent
    End Function

    Public Overrides Sub CargarRelacion(ByRef entidad As Entidades.EntityBase, ByRef stack As Stack(Of Integer))

        Dim testDao As New TestDAO
        Dim test As New TestEntity
        test = testDao.Seleccionar(stack.Pop)
        DirectCast(entidad, AsignacionEntity).Test = test

        Dim usuarioDao As New UsuarioDAO
        Dim usuario As New UsuarioEntity
        usuario = usuarioDao.Seleccionar(stack.Pop)
        DirectCast(entidad, AsignacionEntity).User = usuario

        Dim estadoDao As New EstadoDAO
        Dim estado As New EstadoEntity
        estado = estadoDao.Seleccionar(stack.Pop)
        DirectCast(entidad, AsignacionEntity).Estado = estado

    End Sub

    Public Overrides Function commandActualizar(ByRef ent As Entidades.EntityBase) As System.Data.SqlClient.SqlCommand
        Dim cmd As New SqlCommand("UPDATE Asignacion SET tiempoLimite = @tiempoLimite, estado_id = @estado_id, usuario_id = @usuario_id, test_id = @test_id, fechaAsignacion = @fechaAsignacion WHERE id = @id")
        'Creo los parametros para la consulta
        cmd.Parameters.Add(New SqlParameter("@tiempoLimite", DirectCast(ent, AsignacionEntity).TiempoLimite))
        cmd.Parameters.Add(New SqlParameter("@estado_id", DirectCast(ent, AsignacionEntity).Estado))
        cmd.Parameters.Add(New SqlParameter("@usuario_id", DirectCast(ent, AsignacionEntity).User))
        cmd.Parameters.Add(New SqlParameter("@test_id", DirectCast(ent, AsignacionEntity).Test))
        cmd.Parameters.Add(New SqlParameter("@fechaAsignacion", DirectCast(ent, AsignacionEntity).FechaAsignacion))
        cmd.Parameters.Add(New SqlParameter("@id", ent.Id))
        commandActualizar = cmd
    End Function

    Public Overrides Function commandEliminar(ByVal id As Integer) As System.Data.SqlClient.SqlCommand
        'Creo el Command con la consulta
        Dim cmd As New SqlCommand("DELETE FROM Asignacion WHERE id = @id")
        'Creo los parametros para la consulta
        cmd.Parameters.Add(New SqlParameter("@id", id))
        commandEliminar = cmd
    End Function

    Public Overrides Function commandInsertar(ByRef ent As Entidades.EntityBase) As System.Data.SqlClient.SqlCommand
        'Creo el Command con la consulta
        Dim cmd As New SqlCommand("INSERT INTO Asignacion VALUES(@tiempoLimite, @estado_id, @usuario_id, @test_id, @fechaAsignacion)")
        'Creo los parametros para la consulta
        cmd.Parameters.Add(New SqlParameter("@tiempoLimite", DirectCast(ent, AsignacionEntity).TiempoLimite))
        cmd.Parameters.Add(New SqlParameter("@estado_id", DirectCast(ent, AsignacionEntity).Estado))
        cmd.Parameters.Add(New SqlParameter("@usuario_id", DirectCast(ent, AsignacionEntity).User))
        cmd.Parameters.Add(New SqlParameter("@test_id", DirectCast(ent, AsignacionEntity).Test))
        cmd.Parameters.Add(New SqlParameter("@fechaAsignacion", DirectCast(ent, AsignacionEntity).FechaAsignacion))
        commandInsertar = cmd
    End Function

    Public Overrides Function commandSeleccionar(ByVal id As Integer) As System.Data.SqlClient.SqlCommand
        'Creo el Command con la consulta
        Dim cmd As New SqlCommand("SELECT * FROM Asignacion WHERE id = @id")
        'Creo los parametros para la consulta
        cmd.Parameters.Add(New SqlParameter("@id", id))
        commandSeleccionar = cmd
    End Function

    Public Overrides Function commandSeleccionarWhere(ByVal where As String) As SqlCommand
        'Creo el Command con la consulta
        Dim cmd As New SqlCommand("SELECT * FROM Asignacion WHERE " + where)
        'Creo los parametros para la consulta
        cmd.Parameters.Add(New SqlParameter("@where", where))
        commandSeleccionarWhere = cmd
    End Function

    Public Overrides Function commandSeleccionarTodas() As System.Data.SqlClient.SqlCommand
        Dim cmd As New SqlCommand("SELECT * FROM Asignacion")
        commandSeleccionarTodas = cmd
    End Function
End Class
